perm filename PRETTY.MAN[VLI,LSP] blob
sn#382055 filedate 1978-09-08 generic text, type T, neo UTF8
CHAPITRE 10
PRETTY-PRINT, CROSS-REFERENCE ET INDEX
10.1 LE PRETTY-PRINT
Les fonctions standards PRINT et PRIN1 sont d'ordinaire utilisees
pour editer les S-expressions VLISP. Les seules mesures prises pour
ameliorer la lisibilite sont :
- l'insertion d'un espace entre chaque atome ;
- l'interdiction d'editer un atome (atome litteral, nombre ou chaine
de caracteres) sur deux lignes.
Ces mesures sont nettement insuffisantes pour editer vos programmes.
Les fonctions du Pretty-Print vont les editer d'une maniere beaucoup
plus lisible en faisant resortir, au moyen de renfoncements gauches
et de sauts de lignes ad hoc, la structure de controle de vos
fonctions.
Les macros-caracteres definis de maniere standard dans le systeme
(i.e. les caracteres ' [ ] ) sont restitues par le Pretty-Print.
En outre les LAMBDA-expressions explicites sont editees sous leurs
formes LET.
10.1.1 Les Fonctions Du Pretty-Print
Les fonctions standards qui vont etre decrites sont de type AUTOLOAD
(i.e. il n'est pas besoin de charger le fichier qui les contient,
le systeme le fera pour vous au premier appel de l'une de ces
fonctions).
D'ordinaire ces fonctions se trouvent dans le fichier :
(SYS (PRETTY . VLI)) pour la version interpretee
(SYS (PRETTY . VLA)) pour la version compilee lisible
(SYS (PRETTY . VLO)) pour la version compilee chargeable
Il existe une image memoire contenant le Pretty-Print compile.
Cette image memoire se trouve (en general) dans un fichier systeme
de nom : VPRETTY . Donc pour utiliser un interprete contenant deja
un PRETTY-PRINT compile il suffit d'emettre la commande moniteur :
.R VPRETTY
VLISP 10 . 3 Manuel de Reference Page 10-2
(PRETTYP <s>) [SUBR a 1 argument]
edite la S-expression <s>. Cette fonction ramene <s> en
valeur. Elle est utilisee en general dans vos propres
fonctions qui veulent editer proprement des S-expressions
VLISP.
(PRETTY <a1> <a2> ... <aN>) [FSUBR]
edite les definitions existantes de type EXPR, FEXPR, MACRO,
MACIN, MACOUT ou macro-caractere des differents atomes <a1> ...
<aN> sous leurs formes DE, DF, DM, DMI, DMO ou DMC. Cette
fonction ramene toujours NIL en valeur. Elle est utilisee en
mise au point conversationnelle, pour verifier aisement un
parenthesage douteux.
(PRETTYFILE <filout> <filin> <sw1>) [SUBR a 3 arguments]
edite dans le fichier de sortie <filout>, toutes les
S-expressions contenues dans le fichier d'entree <filin>. S'il
n'y a pas de specifications pour le fichier de sortie (si
<filout> = NIL), le fichier (DSK (PRETTY . VLP) () \055) est
utilise. L'extension standard des fichiers de sortie du
Pretty-Print est .VLP . Ces fichiers peuvent etre relus par
VLISP, mais doivent etre reformates pour utiliser l'editeur de
l'IRCAM ETV.
L'indicateur <sw1> permet de controler le transcodage
automatique minuscule majuscule : si <sw1> = NIL, toutes les
lettres sont traduites en majuscule, si <sw1> = T les lettres
sont restituees dans les casses d'origine. Si cette derniere
option est choisie, les noms des fonctions standard ne sont pas
reconnus s'ils apparaissent en minuscules.
Cette fonction permet de faire des copies lisibles de vos
programmes apres mise au point. De plus cette fonction a le
bon gout de lire et de reecrire les commentaires (i.e. la
suite de caracteres quelconques encadree du delimiteur ";") qui
sont d'habitude completement ignores de LISP. Ceci devrait
vous donner l'envie de bien commenter les programmes.
Un saut de page est effectue a chaque occurence du caractere
↑L (Form Feed) ou a la rencontre du commentaire speciale ;PAGE;
.
PRETTYFILE ramene en valeur le nom du fichier de sortie
utilise.
(PRETTYF <file> <sw1>) [FSUBR]
est une forme abregee de la fonction PRETTYFILE. L'appel
(PRETTYF <file> <sw1>) correspond a l'appel suivant :
(PRETTYFILE '(DSK (<file> . VLP) (GETPPN) \055)
'(DSK (<file> . VLI))
VLISP 10 . 3 Manuel de Reference Page 10-3
<sw1>)
Cette fonction est donc utilisee pour editer d'une maniere
standard un fichier standard. PRETTYF ramene la valeur du
PRETTYFILE i.e. le nom du fichier de sortie utilise.
(PRETTYSIZE <n>) [SUBR a 1 argument]
permet d'initialiser a <n> la largeur d'impression du
Pretty-Print. Par defaut cette largeur est de 72 ce qui
correspond a-peu-pres au format standard 21x29,7. Si <n> n'est
pas donne ou n'est pas un nombre, la largeur standard est
prise. PRETTYSIZE ramene la largeur d'impression courante du
Pretty-Print.
(PRETTYEND) [SUBR a 0 argument]
permet de recuperer la place occupee par les fonctions du
PRETTY-PRINT. PRETTYEND remet egalement les indicateurs
AUTOLOAD de ces fonctions. PRETTYEND ramene en valeur le
nombre de doublets liberes. Si vous utilisez le Pretty-Print
compile, cette fonction n'a aucun effet.
10.1.2 Edition Des Fonctions De L'utilisateur
Le Pretty-Print n'a pas a priori de connaissances sur les fonctions
de l'utilisateur; celles-ci sont editees sans formatage special.
Il est possible d'indiquer au Pretty-Print le format souhaite pour
des fonctions particulieres de l'utilisateur en mettant sur la
P-liste des atomes fonctions le format a utiliser sous l'indicateur
PRETTY. Le type du format a utiliser est simplement le nom de la
fonction standard dont on veut "imiter" le format. Il n'est pas
possible actuellement de definir de nouveaux formats.
ex : (PUT 'US3 'PROGN 'PRETTY)
indique au Pretty-Print d'editer la fonction US3 d'une maniere
identique a la fonction standard PROGN.
Les formats les plus usites sont :
PROGN (<fonction>
<argument 1>
.....
.....
<argument N>)
LAMBDA (<fonction> <argument 1>
<argument 2>
.....
.....
<argument N>)
VLISP 10 . 3 Manuel de Reference Page 10-4
DE (<fonction> <argument 1> <argument 2>
<argument 3>
.....
.....
<argument N>)
SETQ (<fonction>
<argument 1> <argument 2>
..................
..................
<argument N-1> <argument N>)
Pour ne pas surcharger la P-liste des atomes par des indicateurs qui
sont rarement utilises, il est recommande de ne mettre ces
indicateurs qu'au moment de l'edition. La fonction PRETTYFILE
(ainsi que la fonction PRETTYF) interprete les formes :
(POUR PRETTY ... )
La pose des indicateurs speciaux PRETTY se fera donc avantageusement
par cet intermediaire.
ex : (POUR PRETTY (PUT 'US3 'PROGN 'PRETTY))
Cette forme, si elle est lue par la fonction PRETTYFILE, est
equivalente a (PUT 'US3 'PROGN 'PRETTY) en revanche, lue par le
TOPLEVEL (i.e. l'evaluateur VLISP), elle est ineffective.
Cette interpretation des POURs peuvent avoir d'autres utilites que
la pose d'indicateurs
par exemple :
(POUR PRETTY (STATUS 6 8))
indique au Pretty-Print (et a lui seul) qu'il faut ecrire les
nombres en utilisant une base octale ...
10.1.3 Exemples D'Utilisation Du Pretty-Print
.R VPRETTY
VLISP 10-3
--- ALLO ? ---
.REE
? (PRETTY WHOIS WHOISALL)
(DE WHOIS (NAME LIGNE N)
(SETQ NAME (STRING NAME) N (STRINGL NAME))
(DE EOF () (REMPROP 'EOF 'EXPR) (&EOF))
(INPUT '(SYS (FACT . TXT)))
(ESCAPE &JELAI
(ESCAPE &EOF
(WHILE T
(SETQ LIGNE (READSTR))
(IF (EQ NAME (SUBSTRING LIGNE 1 N))
VLISP 10 . 3 Manuel de Reference Page 10-5
(&JELAI (INPUT) (SUBSTRING LIGNE (+ N 2))))))
(INPUT)
"Nie ma ..."))
(DE WHOISALL ()
(DE EOF () (REMPROP 'EOF 'EXPR) (INPUT) (&EOF))
(INPUT '(SYS (FACT . TXT)))
(ESCAPE &EOF (WHILE T (PRINT (READSTR)))))
= NIL
= ; time = 460 ms ;
?
?
? (PRETTY /↑P)
(DMC /↑P () ['PRETTY (READ)])
= NIL
= ; time = 20 ms ;
?
? ←
Bye
EXIT
VLISP 10 . 3 Manuel de Reference Page 10-6
10.2 LE CROSS-REFERENCE
D'une maniere identique au Pretty-Print, le Cross-Reference va
editer des fonctions VLISP, en faisant resortir au moyen de
renfoncements gauches et de sauts de lignes ad hoc, les structures
de controle des fonctions.
De plus chaque ligne en sortie est numerotee, ce qui permet en fin
d'edition d'etablir un listage des "references croissees", i.e. la
liste de tous les atomes litteraux, triee par ordre alphabetique,
rencontres dans la (ou les) fonction d'entree. A cote de chaque
atome, les numeros de lignes, dans lesquelles apparait cet atome,
sont edites, tries par ordre croissant.
10.2.1 Les Fonctions Du Cross-Reference
Les fonctions du Cross-Refernce qui vont etre decrites sont de type
AUTOLOAD (i.e. il n'est pas besoin de charger le fichier qui les
contient, le systeme le fera pour vous au premier appel de l'une de
ces fonctions).
D'ordinaire ces fonctions se trouvent dans le fichier :
(SYS (PRETTY . VLI)) pour la version interpretee
(SYS (PRETTY . VLA)) pour la version compilee lisible
(SYS (PRETTY . VLO)) pour la version compilee chargeable
Les fonctions du Cross-Reference se trouvent donc sur le meme
fichier que les fonctions du Pretty-Print. Il est donc possible
d'utiliser l'image memoire contenant ce fichier compile. L'appel de
cette image memoire s'effectue au moyen de la commande moniteur :
.R VPRETTY
(CROSSFILE <filout> <filin> <sw1>) [SUBR a 3 arguments]
edite dans le fichier de sortie <filout>, toutes les
S-expressions contenues dans le fichier d'entree <filin> en
numerotant toutes les lignes, puis toujours dans le meme
fichier de sortie CROSSFILE imprime la liste des references
croissees de tous les atomes litteraux du fichier.
S'il n'y a pas de specification pour le fichier de sortie (si
<filout> = NIL), le fichier (DSK (CROSS . VLC) () \055) est
utilise. L'extension standard des fichiers de sortie du
Cross-Reference est .VLC . Ces fichiers ne peuvent pas etre
relus directement par VLISP car les lignes sont numerotees.
L'indicateur <sw1> sert a specifier s'il faut traiter les
references aux atomes systemes. Si <sw1> = NIL, seuls les
atomes utilisateurs seront traites, si <sw1> = T, tous les
atomes seront traites.
CROSSFILE ramene le nom du fichier de sortie utilise.
VLISP 10 . 3 Manuel de Reference Page 10-7
(CROSSF <file> <sw1>) [FSUBR]
est une forme abregee de la fonction CROSSFILE. L'appel
(CROSSF <file> <sw1>) correspond a l'appel suivant :
(CROSSFILE '(DSK (<file> . VLC) (GETPPN) \055)
'(DSK (<file> . VLI))
<sw1>)
Cette fonction est donc utilisee pour editer d'une maniere
standard un fichier standard. CROSSF ramene la valeur du
CROSSFILE i.e. le nom du fichier de sortie utilise.
(CROSS <at> <sw1>) [FSUBR]
Effectue l'edition de la fonction de nom <at> ainsi que
l'impression de ses references croisees d'une maniere identique
a la fonction CROSSFILE. Toutes ces impressions se font dans
le fichier de sortie courant.
10.2.2 Exemple D'utilisation Du Cross-Reference
.R VPRETTY
VLISP 10-3
--- ALLO ? ---
.REE
? (CROSS TYPE T)
1 (DE TYPE (FILIN)
2 (INPUT FILIN)
3 (STATUS 17 (ASCII 13) 2)
4 (DE EOF ()
5 (REMPROP 'EOF EXPR)
6 (STATUS 1 20)
7 (TERPRI)
8 (INPUT)
9 (&EOF))
10 (ESCAPE &EOF (WHILE T (PRINC (READCH))))
11 (STATUS 17 (ASCII 13) 0)
12 FILIN)
"Cross Reference"
1 &EOF 9 10
2 ASCII 3 11
3 DE 1 4
VLISP 10 . 3 Manuel de Reference Page 10-8
4 EOF 4 5
5 ESCAPE 10
6 EXPR 5
7 FILIN 1 2 12
8 INPUT 2 8
9 PRINC 10
10 READCH 10
11 REMPROP 5
12 STATUS 3 6 11
13 T 10
14 TERPRI 7
15 TYPE 1
16 WHILE 10
VLISP 10 . 3 Manuel de Reference Page 10-9
10.3 L'INDEX (1)
Le programme d'INDEX effectue la lecture d'un ensemble de fonctions
et edite, en fin de lecture, une serie de renseignements sur
chacunes des fonctions traitees ainsi que certaines interactions
entre les fonctions elles-meme.
L'INDEX fourni pour chaque fonction les renseignements suivants :
TYPE = le type de la fonction qui peut etre EXPR, FEXPR, MACRO,
MACIN, MACOUT ou MCHAR (pour les macros-caracteres).
ARGS = les arguments de la fonction
FVARS = les variables libres utilisees a l'interieur de cette
fonction.
FVARSET = les variables libres qui sont modifiees a l'interieur de
cette fonction.
STRINGS = les constantes de chaine de caracteres utilisees dans
cette fonction.
USING = les fonctions (de l'ensemble des fonctions traitees
uniquement) qui sont appellees par cette fonction.
USEDBY = les fonctions (de l'ensemble des fonctions traitees
uniquement) qui appellent cette fonction.
Ces deux derniers renseignements sont indispensables pour determiner
l'arbre des appels des fonctions.
10.3.1 Les Fonctions De L'INDEX
Les fonctions de l'INDEX qui vont etre decrites sont de type
AUTOLOAD (i.e. il n'est pas besion de charger le fichier qui les
contient, le systeme le fera pour vous automatiquement au premier
appel de l'une de ces fonctions).
D'ordinaire ces fonctions se trouvent dans le fichier :
(SYS (INDEX . VLI)) pour la version interpretee
(SYS (INDEX . VLA)) pour la version compilee lisible
(SYS (INDEX . VLO)) pour la version compilee chargeable
--------------------------------------------------------------------
(1) Ce programme a ete concu et realise par PATRICK GREUSSAY.
VLISP 10 . 3 Manuel de Reference Page 10-10
(INDEXFILE <filout> <filin> <sw1>) [SUBR a 3 arguments]
traite toutes les fonctions incluses dans le fichier d'entree
<filin> et edite l'index de ces fonctions dans le fichier de
sortie <filout>. Si l'indicateur <sw1>=T les fonctions
apparaitront triees par ordre alphabetique dans le fichier de
sortie; si l'indicateur <sw1>=NIL, les fonctions apparaitront
dans le fichier de sortie dans le meme ordre que dans le
fichier d'entree. S'il n'y a pas de specification pour le
fichier de sortie (i.e. si <filout> = NIL), le fichier
(DSK (INDEX . VLX) () \055) est utilise. L'extension standard
des fichiers de sortie de l'INDEX est .VLX .
INDEXFILE ramene en valeur le nom du fichier de sortie utilise.
(INDEXF <file> <sw1>) [FSUBR]
est une forme abregee de la fonction INDEXFILE. L'appel
(INDEXF <file> sw1>) correspond a l'appel :
(INDEXFILE '(DSK (<file> . VLX) (GETPPN) \055)
'(DSK (<file> . VLI))
<sw1>)
Cette fonction ramene la valeur ramenee par INDEXFILE i.e. le
nom du fichier de sortie utilise.
10.3.2 Exemple De Sortie Obtenue Par L'Index
(extrait de l'INDEX du fichier PRETTY.VLI)
.....
.....
---------- CROSSFILE ----------
TYPE = EXPR
ARGS = (FILOUT FILIN ?CROSSALL ?INDEX NBLINE NBFNT)
FVARS = (PRETTYSIZE)
FVARSET = (PRETTYSIZE)
---------- CROSSPRINT ----------
TYPE = EXPR
ARGS = ( NB X)
FVARS = ( NBFNT ?INDEX)
FVARSET = (?INDEX)
STRINGS = ("Cross Reference")
USEDBY = (CROSS EOF)
VLISP 10 . 3 Manuel de Reference Page 10-11
---------- EOF ----------
TYPE = EXPR
FVARS = (?INDEX FILIN FILOUT PTVRG)
USING = (%PC &EOF CROSSPRINT PRETTYFIN)
---------- FLATSIZE ----------
TYPE = EXPR
ARGS = (%L %N)
USING = (ADDN FLATSIZE)
USEDBY = (FLATSIZE SARENTRE)
.....
.....
.....
Page Index-1
TABLE D'INDEX DE PRETTY, CROSS-REFERENCE ET INDEX.
(CROSS at sw1) FSUBR . . . . . . 10-7
(CROSSF file sw1) FSUBR . . . . 10-7
(CROSSFILE filout filin sw1) SUBR a 3 arguments 10-6
(INDEXF file sw1) FSUBR . . . . 10-10
(INDEXFILE filout filin sw1) SUBR a 3 arguments 10-10
(PRETTY at1 at2 ... atn) FSUBR . 10-2
(PRETTYEND) SUBR a 0 argument . 10-3
(PRETTYF file sw1) FSUBR . . . . 10-2
(PRETTYFILE filout filin sw1) SUBR a 3 arguments 10-2
(PRETTYP s) SUBR a 1 argument . 10-2
(PRETTYSIZE n) SUBR a 1 argument 10-3
.VLC . . . . . . . . . . . . . . . 10-6
.VLP . . . . . . . . . . . . . . . 10-2
.VLX . . . . . . . . . . . . . . . 10-10
;PAGE; . . . . . . . . . . . . . . 10-2
CROSS-REFERENCE . . . . . . . . . 10-6
ETV. . . . . . . . . . . . . . . . 10-2
INDEX . . . . . . . . . . . . . . 10-9
Majuscule . . . . . . . . . . . . 10-2
Minuscule . . . . . . . . . . . . 10-2
PATRICK GREUSSAY. . . . . . . . . 10-9
PRETTY-PRINT . . . . . . . . . . . 10-1
PRIN1 . . . . . . . . . . . . . . 10-1
PRINT . . . . . . . . . . . . . . 10-1
VPRETTY . . . . . . . . . . . . . 10-1
↑L . . . . . . . . . . . . . . . . 10-2